home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 7
/
Amiga Format AFCD07 (Dec 1996, Issue 91).iso
/
serious
/
shareware
/
comms
/
internet
/
html-related
/
hsc
/
source
/
hsclib
/
entity.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-17
|
4KB
|
231 lines
/*
** entity.c
**
** entity structure, variables and functions ( "&xx;")
**
** Copyright (C) 1995,96 Thomas Aglassinger
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
** updated: 17-Mar-1996
** created: 8-Sep-1995
**
*/
#define NOEXTERN_HSCLIB_ENTITY_H
#include "hsclib/inc_base.h"
#include "hsclib/entity.h"
/*
**-------------------------------------
** constructor/destructor
**-------------------------------------
*/
/*
** new_hscent
**
** alloc & init a new hscentity
*/
HSCENT *new_hscent( STRPTR newid )
{
HSCENT *newent = (HSCENT*) umalloc( sizeof(HSCENT) );
#if DEBUG_ENTITY
fprintf( stderr, DHL " new_enty %s\n", newid );
#endif
if (newent) {
/* init new entity item */
newent->name = strclone(newid); /* set id */
newent->replace = NULL;
newent->numeric = 0L;
}
return (newent);
}
/*
** del_entity
*/
VOID del_entity( APTR data )
{
HSCENT *ent = (HSCENT *)data;
#if DEBUG_ENTITY
fprintf( stderr, DHL " del_enty %s\n", ent->name );
#endif
ufreestr( ent->name );
ufreestr( ent->replace );
ent->numeric = 0;
ufree( ent );
}
/*
** cpy_hscent
**
** create a copy of an already existing entity
*/
HSCENT *cpy_hscent( HSCENT *oldent )
{
HSCENT *newent = new_hscent( oldent->name );
if ( newent ) {
newent->replace = strclone( oldent->replace );
newent->numeric = oldent->numeric;
}
return( newent );
}
/*
**---------------------------
** find entity string
**---------------------------
*/
/*
** cmp_strent
**
** compares a entity-string with the name
** of a HSCENT-entry
*/
int cmp_strent( APTR cmpstr, APTR entdata )
{
STRPTR entstr = NULL;
if ( entdata )
entstr = ((HSCENT*)entdata)->name;
if (entstr)
if ( !strcmp( cmpstr, entstr ) )
return (-1);
else
return (0);
else
return (0);
}
/*
** cmp_nument
**
** compares a entity-string with the numeric
** data of a HSCENT-entry
*/
int cmp_nument( APTR cmpstr, APTR entdata )
{
LONG num = -1;
LONG cmpnum = (LONG) cmpstr;
if ( entdata )
num = ((HSCENT*)entdata)->numeric;
return( ( num != -1 ) && ( num == cmpnum ) );
}
/*
** cmp_rplcent
**
** compares a entity-string with the replace-item
** of a HSCENT-entry
*/
int cmp_rplcent( APTR cmpstr, APTR entdata )
{
STRPTR entstr = NULL;
if ( entdata )
entstr = ((HSCENT*)entdata)->replace;
if (entstr)
if ( !strcmp( cmpstr, entstr ) )
return (-1);
else
return (0);
else
return (0);
}
/*
**-------------------------------------
** append entity functions
**-------------------------------------
*/
/*
** app_entnode
**
** create a new entity and append it to entity-list
**
** params: entid..name of the new entity (eg "uuml")
** result: ptr to the new entity or NULL if no mem
*/
HSCENT *app_entnode( DLLIST *entlist, STRPTR entid )
{
HSCENT *newent;
newent = new_hscent( entid );
if ( newent ) {
if (app_dlnode( entlist, newent ) == NULL ) {
del_entity( (APTR) newent );
newent = NULL;
}
}
return (newent);
}
/*
** add_ent
*/
BOOL add_ent( DLLIST *entlist, STRPTR entid, STRPTR entreplace, LONG num )
{
HSCENT *newent = app_entnode( entlist, entid );
if ( entreplace )
newent->replace = strclone( entreplace );
newent->numeric = num;
#if 0
DDE(
{
STRPTR rplc = entreplace;
if ( !rplc )
rplc = "(empty)";
fprintf( stderr, DHL "defent: \"%s\" \"%s\" %ld\n",
entid, rplc, num );
}
);
#endif
return (TRUE);
}